"""
数据结构和算法介绍：
    概述/目的：
        1：掌握好数据结构和算法，可以大大提升程序的性能
        2：面试的高频考点
        3：程序=数据结构+算法
    名词解释：
        数据结构：存储和组织数据的方式，例如：栈、堆、队列、数组、链表、树等
        算法：为了解决实际业务问题，而想出来的办法或者思路。
    算法：
        具有独立性，即：它不依赖编程语言，用java、python等都能实现，他是解决问题的一种方法。
        特点：
            1：有输入
            2：有输出
            3：有穷性
            4：确定性
            5：可行性
"""
import time

# 案例1：演示穷举法
# 需求：已知a+b+c+1000，且a**2+b**2=c**2，请问：a，b，c的组合方式有哪些？【勾股定理】
# 使用穷举法来实现：
# start = time.time()
# for a in range(1, 1001): # 总循环次数：1000*1000*1000 = 1,000,000,000
#     for b in range(1, 1001):
#         for c in range(1, 1001):
#             if a + b + c == 1000 and a**2 + b**2 == c**2:
#                 print(a, b, c)
# end = time.time()
# print(f"程序运行时间：{end - start}") # 程序运行时间：100.78477144241333
# a+b+c=1000， 等同于：c=1000-a-b

# 使用代入法来实现:
start = time.time()
for a in range(1, 1001): # 总循环次数：100：1000*1000 = 1,000,000
    for b in range(1, 1001):
        c = 1000 - a - b
        if a + b + c == 1000 and a ** 2 + b ** 2 == c ** 2:
            print(a, b, c)
end = time.time()
"""
200 375 425
375 200 425
程序运行时间：0.34387731552124023
"""
print(f"程序运行时间：{end - start}") # 程序运行时间：

"""
分析：
    1：使用穷举法来实现，总循环次数：1,000,000,000
    2：使用代入法来实现，总循环次数：1,000,000
    3：代入法的效率比穷举法效率高
减少了循环的层数，提升了程序的性能
"""